导航菜单

[强网杯 2019]Upload

题目没有注入,注册完进来张这个样子

图片.png过程1.尝试多种上传之后,发现只有jpg图片里加一句话可以有效上传。上传成功后,在upload文件夹下,文件名变为md5。并且无法再次上传。upload/adeee0c170ad4ffb110df0cde294aecd/f3ccdd27d2000e3f9255a7e3e2c48800.png图片.png2.发现有一个聊天框,感觉可以文件包含。目录扫描,发现/www.tar.gz,下载源码,发现是tp5.1。同时抓包发现cookie是一串base64,解密后是反序列化。图片.png看到Profile这个文件,主要是文件上传在这里插入图片描述

发现这部分引用了一个新类,并且这个类在该文件没有找到最终发现在index.php这里

在这里插入图片描述

说明上传之前会检查一遍账号信息接着看Profile.php

在这里插入图片描述

看到这个函数

在这里插入图片描述

会进行一次检查

看到下面有两个魔术方法

在这里插入图片描述

关键就在怎么触发这两个魔术方法

当对象调用不可访问属性时,就会自动触发get魔法方法在对象调用不可访问函数时,就会自动触发call魔法方法。

看到register.php 这里

在这里插入图片描述

发现有个__destruct()魔术方法,

在这里插入图片描述

上面这两输出可控,我们可以让checker这个属性为Profile类然后就会调用Profile类里的index()函数,那么就会触发__call魔术方法

在这里插入图片描述

name是不可访问函数的名字arguments是参数,为空而当使用this->index,就是访问一个不可访问的属性,然后触发__get()魔术方法

在这里插入图片描述

而except这个参数我们可以控制,并且他访问了索引name,说明他是一个数组

在这里插入图片描述

接着就是让except变成啥样我们再回过头来看上传的部分

在这里插入图片描述

只要我们第一次上传文件,那么empty($_FILES)就会为1,那么就会绕过下面那个png检查,直接跳过,进入下一个if

在这里插入图片描述

我们让ext等于1即可进入filename我们可控,由此可以通过这个来将我们的webshell复制到filename里去要触发这个东西我们需要调用upload_img这个方法而调用upload_img刚好可以通过上面那两个魔术方法调用整个POP链大概是这样

在这里插入图片描述

让A类访问一个不可访问的函数,触发__call,在通过call里访问不可访问的属性触发__get,然后调用upload_Img方法接着要找一个反序列化函数,那让POP链成功执行

在这里插入图片描述

发现index.php里会反序列化cookie,由此通过这个来进行我们的pop链。exp:

相关推荐: